# @Time : 2020/8/28 10:08
# @Author : Fioman 
# @Phone : 13149920693
import numpy as np

"""
numpy.where(condition)  当condition里面的主体是一维数组的时候.返回一个一维的numpy的array,满足condition的下标.
如果condition里面的主体是二维数组,这返回的是一个二维的numpy的array.
"""
arrOneDim = np.random.randint(1, 10, (10,))
print(arrOneDim)
arrWhere = np.where(arrOneDim > 5)
print(arrWhere)
arrRes = arrOneDim[arrWhere]  # 等价于arrOneDim[arrOneDim>5],其实这个是切片,当满足条件的时候就保留,不满足条件的就舍弃
print(arrRes)

arrBool = np.array([False,True,False,True,False])
print(np.where(arrBool))  # (array([1, 3], dtype=int64),), 返回是True的索引

"""
如果condition是二维的,则返回的是一个二维数组,一个表示行坐标,一个表示列坐标
"""
arrTwoDim = np.random.randint(1,10,(2,5))
print(arrTwoDim)
arrWhere = np.where(arrTwoDim>3)
print(arrWhere)
print(arrTwoDim[arrWhere]) # 这个返回的依旧是一个一维的数组.二维数组降低成一维数组了

"""
如果condition是二维的,并且没有任何的条件,只有它本身,则会用非零和零来作为筛选条件
"""
arrNoCondition = np.where([[1,2,3],[0,1,0]])
print(arrNoCondition) # (array([0, 0, 0, 1], dtype=int64), array([0, 1, 2, 1], dtype=int64))



"""
包含三个参数的condition,x,y案例,类似于  x if condition else y
"""
arrOneDim = np.arange(10)
print(arrOneDim)
arrWhere = np.where(arrOneDim,1,-1)
print(arrWhere)

arrWhere2 = np.where(arrOneDim>5,1,-1)
print(arrWhere2)

arrWhere3 = np.where([[True,False],[True,True]],[[1,2],[3,4]],[[9,8],[7,6]])
print(arrWhere3)

"""

"""






















